//-------------------------------------------------------------------------
/**
   File:   Option.h

   Descr.: - todo -

   Author: Stefan Leihkauf
   Date:   14.04.2014
*/
//-------------------------------------------------------------------------
#ifndef _OPTION_H
#define _OPTION_H
#include "common/types/typedef.h"

namespace cb { namespace detail {

class Option
{
    StdString _key;
    StringList _values;

    // check if given value exists
    bool ValueExists(const StdString& value) const;

public:
    // constructor
    Option(const StdString& key);
    // constructor
    Option(const StdString& key, const StdString& value);
    // constructor
    Option(const StdString& key, const StringList& values);
    // destructor
    ~Option();

    // set option value
    void SetValue(const StdString& value);
    // set list of option values
    void SetValues(const StringList& values);

    // get option key
    StdString Key() const;
    // get option values
    const StringList& Values() const;
    // get number of values
    unsigned NumValues() const;
    // check for a specific value
    bool HaveValue(const StdString& name) const;

    // check if empty
    bool IsEmpty() const;

    // equality
    bool operator == (const Option& other) const;

    // empty option
    static Option Empty();

    // create option from string
    static Option FromString(const StdString& line);
};

}} // namespace

#endif //!defined _OPTION_H